package com.badlogic.androidgames.stringutil;

public class MyString {
	private String textPlaceHolder = "     ?";
	private String textLabelPrinted;
	
	private int textMaxLine;//2
	private int textMaxLineLenght;//11
	
	private String[] line;
	private int currentLine = 0;
	
	public boolean isEmpty()
	{
		if(textLabelPrinted == null)
			return true;
		else if(textLabelPrinted.length() == 0)
			return true;
		else 
			return false;
	}
	
	public MyString(int textMaxLine, int textMaxLineLenght)
	{
		this.textMaxLine = textMaxLine;
		this.textMaxLineLenght = textMaxLineLenght;
		
		this.textLabelPrinted = new String("");
		
		this.line = new String[textMaxLine];
		for(int i = 0;i < line.length; i++)
		{
			this.line[i] = new String("");
		}	
	}
	
	public String getText()
	{
		if(textLabelPrinted == null)
			return textPlaceHolder;
		else if(textLabelPrinted.length() == 0)
			return textPlaceHolder;
		else 
			return textLabelPrinted;
	}
	
	public void processKeyInput(char in)
    {
    	
    	if(Integer.valueOf(in)==0)
    	{//cancellazione
    		//se siamo sulla prima riga
    		if(currentLine == 0)
			{
    			if(line[currentLine].length() > 0)
    			{
    				line[currentLine] = line[currentLine].substring(0, line[currentLine].length()-1); 
    			}
			}
    		//se siamo sulle successive
    		else if(currentLine > 0)
			{
    			if(line[currentLine].length() > 0)
    			{
    				line[currentLine] = line[currentLine].substring(0, line[currentLine].length()-1);

    				//parte che gestisce il far tornare sulla riga precedente
    				int last = line[currentLine].lastIndexOf(' ');
    				if(last == -1)
    				{
    					last = line[currentLine-1].lastIndexOf(' ');
    					if(last != -1) //c'e' uno spazio alla fine della riga precedente
    					{
    						if(line[currentLine].length() < (textMaxLineLenght-last))
    						{
    							line[currentLine-1] = line[currentLine-1].concat(line[currentLine]);
    							line[currentLine] = new String("");
    							currentLine--;
    						}
    					}
    				}
    			}
    			else if(line[currentLine].length() == 0)
    			{
    				currentLine--;
    				line[currentLine] = line[currentLine].substring(0, line[currentLine].length()-1);
    			}
    		}
    	}
    	else
    	{//inserimento, se minore del numero massimo inserisco altrimenti no
    		if(line[currentLine].length() < textMaxLineLenght)
    		{
    			line[currentLine] = line[currentLine].concat(String.valueOf(in)); 
    		}
    		else if(line[currentLine].length() == textMaxLineLenght)
    		{
    			if(currentLine < textMaxLine-1)
    			{
    				int last = line[currentLine].lastIndexOf(' ');
    				if(last != -1)
            		{
    					//creo la riga successiva con la parte che va a capo
    					line[currentLine+1] = line[currentLine].substring( last+1,line[currentLine].length());
    					//modifico la riga passata togliendo la parte che va a capo
    					line[currentLine] = line[currentLine].substring(0, last+1);
    					//concateno il nuovo carattere
    					line[currentLine+1] = line[currentLine+1].concat(String.valueOf(in));
            		}	
            		else
            		{
    					//lascio la riga com'e' e metto il carattere in quella dopo 
    					line[currentLine+1] = line[currentLine+1].concat(String.valueOf(in));
            		}
    				currentLine++;		
    			}
    		}
    	}
    	//dopo aver inserito o cancellato genero la stringa completa con gli a capo
		int h;
		textLabelPrinted = new String("");
		for(h = 0;h < currentLine; h++)
		{
			textLabelPrinted = textLabelPrinted.concat(line[h]);
			textLabelPrinted = textLabelPrinted.concat("\n");
		}
		textLabelPrinted = textLabelPrinted.concat(line[h]);
    }
		
	public int getTextMaxLine() {
		return textMaxLine;
	}

	public void setTextMaxLine(int textMaxLine) {
		this.textMaxLine = textMaxLine;
	}

	public int getTextMaxLineLenght() {
		return textMaxLineLenght;
	}

	public void setTextMaxLineLenght(int textMaxLineLenght) {
		this.textMaxLineLenght = textMaxLineLenght;
	}
}







/*public void processKeyInput(char in)
{
	
	if(Integer.valueOf(in)==0)
	{//cancellazione
		if(textLabelPrinted.length() == ((textMaxLenght/2)+1))
		{
			//textLabel = textLabel.substring(0, textLabel.length()-1);
			int last = textLabelPrinted.lastIndexOf('\n');
    		if(last != -1)
    		{
    			String riga1 = textLabelPrinted.substring(0, last);
    			String riga2 = textLabelPrinted.substring( last+1,textLabelPrinted.length());
    			textLabelPrinted = riga1.concat(" ").concat(riga2);
    		}
    		
    		//da gestire il coso in cui ho una striga piu' lunga della riga
    		//sia qua che nell'input
			
		}
		
		if(textLabelPrinted.length()>0)
		{
			textLabel = textLabel.substring(0, textLabel.length()-1);
			textLabelPrinted = textLabelPrinted.substring(0, textLabelPrinted.length()-1);
		}
	}
	else
	{//inserimento
		//ll.textLabel = ll.textLabel.concat(String.valueOf(Integer.valueOf(event.keyChar)));
		//se minore del numero massimo inserisco
		if(textLabelPrinted.length() < textMaxLenght )
		{
			textLabel = textLabel.concat(String.valueOf(in));
			textLabelPrinted = textLabelPrinted.concat(String.valueOf(in));
		}
		//nel caso debba andare a capo sostituisco l'ultimo spazio con un a capo
		//da gestire il caso di una parola unica lunga
		if(textLabelPrinted.length() == ((textMaxLenght/2)+1))
    	{
			int last = textLabelPrinted.lastIndexOf(' ');
    		if(last != -1)
    		{
    			String riga1 = textLabelPrinted.substring(0, last);
    			String riga2 = textLabelPrinted.substring( last+1,textLabelPrinted.length());
    			textLabelPrinted = riga1.concat("\n").concat(riga2);
    		}	
    		else
    		{
    		
    			///////////////////////////
    			//da fare
    		}
    	}
	}	
}*/
